package main

import (
	"fmt"
	"net"
)

func main() {


	//监听
	listener, err := net.Listen("tcp", "127.0.0.1:8080")

	errHandler(err)

	for ; ; {

		conn, err := listener.Accept()

		errHandler(err)

		go connHandler(conn)
	}

	defer listener.Close()

}

func connHandler(conn net.Conn) {

	addr := conn.RemoteAddr()

	//conn.SetDeadline(time.Now().Add(time.Second * 2))

	fmt.Printf("来自客户端 %s 的连接  \n", addr.String())

	body := make([] byte, 10)

	for ; ; {

		n, err := conn.Read(body)

		if err != nil {

			fmt.Printf("返回错误类型 %T \n", err)

			switch err.(type) {

			case *net.OpError:

				fmt.Printf("远程客户端 %s 断开连接!\n", addr)

				return
			}

		}

		ClientStr := string(body[0:n])

		//fmt.Println(conn.)

		fmt.Printf("来自客户端 %s 的消息: %s \n", addr.String(), ClientStr)

		if ClientStr == "exit" {

			return
		}

	}

	defer conn.Close()

}

func errHandler(err error) {

	if err != nil {

		fmt.Println(err)

	}
}
